home *** CD-ROM | disk | FTP | other *** search
- diff -rc2 ./Makefile /usr/src/linux/Makefile
- *** ./Makefile Thu Aug 5 11:59:18 1993
- --- /usr/src/linux/Makefile Thu Sep 30 10:44:29 1993
- ***************
- *** 163,166 ****
- --- 163,169 ----
- sync
-
- + zNetBoot: $(CONFIGURE) boot/bootsect boot/setup zBoot/zSystem tools/build
- + tools/build -n tools/zSystem \? boot/bootsect boot/setup zBoot/zSystem > zNetBoot
- +
- zdisk: zImage
- dd bs=8192 if=zImage of=/dev/fd0
- diff -rc2 ./boot/bootsect.S /usr/src/linux/boot/bootsect.S
- *** ./boot/bootsect.S Tue Apr 6 20:57:20 1993
- --- /usr/src/linux/boot/bootsect.S Thu Sep 9 07:41:23 1993
- ***************
- *** 46,49 ****
- --- 46,52 ----
- #define RAMDISK 0
- #endif
- + #ifndef RAMDISK_START
- + #define RAMDISK_START 0 /* for net boot 1024, for zBoot + net boot -> after &end */
- + #endif
- #ifndef CONFIG_ROOT_RDONLY
- #define CONFIG_ROOT_RDONLY 0
- ***************
- *** 433,437 ****
- .ascii "Loading"
-
- ! .org 498
- root_flags:
- .word CONFIG_ROOT_RDONLY
- --- 436,442 ----
- .ascii "Loading"
-
- ! .org 496
- ! ramdsk_start:
- ! .word RAMDISK_START
- root_flags:
- .word CONFIG_ROOT_RDONLY
- diff -rc2 ./boot/setup.S /usr/src/linux/boot/setup.S
- *** ./boot/setup.S Thu May 13 12:19:57 1993
- --- /usr/src/linux/boot/setup.S Thu Sep 30 10:10:27 1993
- ***************
- *** 49,52 ****
- --- 49,60 ----
- mov ds,ax
-
- + mov dx,#0x4000-12 ! 0x4000 is arbitrary value >= length of
- +
- + ! we've done all this before in bootsect, but not if we netbooted!
- +
- + mov es,ax
- + mov ss,ax ! put stack at INITSEG:0x4000-12.
- + mov sp,dx
- +
- ! Get memory size (extended mem, kB)
-
- diff -rc2 ./init/main.c /usr/src/linux/init/main.c
- *** ./init/main.c Mon Aug 9 18:02:31 1993
- --- /usr/src/linux/init/main.c Thu Sep 9 08:16:18 1993
- ***************
- *** 95,98 ****
- --- 95,99 ----
- #define DRIVE_INFO (*(struct drive_info_struct *) (PARAM+0x80))
- #define SCREEN_INFO (*(struct screen_info *) (PARAM+0))
- + #define RAMDISK_START (*(unsigned short *)(PARAM+0x1F0))
- #define MOUNT_ROOT_RDONLY (*(unsigned short *) (PARAM+0x1F2))
- #define RAMDISK_SIZE (*(unsigned short *) (PARAM+0x1F8))
- ***************
- *** 166,169 ****
- --- 167,171 ----
- unsigned char aux_device_present;
- int ramdisk_size;
- + int ramdisk_start; /* if set, then assumed that ramdisk already loaded */
- int root_mountflags = 0;
-
- ***************
- *** 344,347 ****
- --- 346,350 ----
- memory_end &= PAGE_MASK;
- ramdisk_size = RAMDISK_SIZE;
- + ramdisk_start = RAMDISK_START;
- strcpy(command_line,COMMAND_LINE);
- #ifdef CONFIG_MAX_16M
- ***************
- *** 351,360 ****
- if (MOUNT_ROOT_RDONLY)
- root_mountflags |= MS_RDONLY;
- ! if ((unsigned long)&end >= (1024*1024)) {
- ! memory_start = (unsigned long) &end;
- ! low_memory_start = PAGE_SIZE;
- ! } else {
- ! memory_start = 1024*1024;
- ! low_memory_start = (unsigned long) &end;
- }
- low_memory_start = PAGE_ALIGN(low_memory_start);
- --- 354,378 ----
- if (MOUNT_ROOT_RDONLY)
- root_mountflags |= MS_RDONLY;
- !
- ! if (ramdisk_start) {
- ! if ((unsigned long)&end >= (1024*1024)) {
- ! /* using zBoot */
- ! if (ramdisk_start * 1024 < ((unsigned long)&end)) {
- ! printk("Ramdisk at incompatible location with kernel\n");
- ! /* what should I do here ? */
- ! }
- ! low_memory_start = PAGE_SIZE;
- ! } else {
- ! low_memory_start = (unsigned long) &end;
- ! }
- ! memory_start = ramdisk_start * 1024 + ramdisk_size * 1024;
- ! } else {
- ! if ((unsigned long)&end >= (1024*1024)) {
- ! memory_start = (unsigned long) &end;
- ! low_memory_start = PAGE_SIZE;
- ! } else {
- ! memory_start = 1024*1024;
- ! low_memory_start = (unsigned long) &end;
- ! }
- }
- low_memory_start = PAGE_ALIGN(low_memory_start);
- diff -rc2 ./kernel/blk_drv/blk.h /usr/src/linux/kernel/blk_drv/blk.h
- *** ./kernel/blk_drv/blk.h Sat Aug 14 23:47:22 1993
- --- /usr/src/linux/kernel/blk_drv/blk.h Thu Sep 9 07:41:23 1993
- ***************
- *** 86,91 ****
-
- extern void rd_load(void);
- ! extern long rd_init(long mem_start, int length);
- extern int ramdisk_size;
-
- extern unsigned long xd_init(unsigned long mem_start, unsigned long mem_end);
- --- 86,92 ----
-
- extern void rd_load(void);
- ! extern long rd_init(long mem_start, int length, int preload);
- extern int ramdisk_size;
- + extern int ramdisk_start;
-
- extern unsigned long xd_init(unsigned long mem_start, unsigned long mem_end);
- diff -rc2 ./kernel/blk_drv/ll_rw_blk.c /usr/src/linux/kernel/blk_drv/ll_rw_blk.c
- *** ./kernel/blk_drv/ll_rw_blk.c Sat Aug 14 23:47:22 1993
- --- /usr/src/linux/kernel/blk_drv/ll_rw_blk.c Thu Sep 9 07:41:24 1993
- ***************
- *** 438,443 ****
- mem_start = mcd_init(mem_start,mem_end);
- #endif
- ! if (ramdisk_size)
- ! mem_start += rd_init(mem_start, ramdisk_size*1024);
- return mem_start;
- }
- --- 438,447 ----
- mem_start = mcd_init(mem_start,mem_end);
- #endif
- ! if (ramdisk_size) {
- ! if (ramdisk_start)
- ! rd_init(ramdisk_start*1024, ramdisk_size*1024, 1);
- ! else
- ! mem_start += rd_init(mem_start, ramdisk_size*1024, 0);
- ! }
- return mem_start;
- }
- diff -rc2 ./kernel/blk_drv/ramdisk.c /usr/src/linux/kernel/blk_drv/ramdisk.c
- *** ./kernel/blk_drv/ramdisk.c Wed Aug 4 22:38:40 1993
- --- /usr/src/linux/kernel/blk_drv/ramdisk.c Thu Sep 9 07:56:20 1993
- ***************
- *** 28,31 ****
- --- 28,33 ----
- char *rd_start;
- int rd_length = 0;
- + int rd_isloaded = 0;
- +
- static int rd_blocksizes[2] = {0, 0};
-
- ***************
- *** 74,78 ****
- * Returns amount of memory which needs to be reserved.
- */
- ! long rd_init(long mem_start, int length)
- {
- int i;
- --- 76,80 ----
- * Returns amount of memory which needs to be reserved.
- */
- ! long rd_init(long mem_start, int length, int preload)
- {
- int i;
- ***************
- *** 88,92 ****
- cp = rd_start;
- for (i=0; i < length; i++)
- ! *cp++ = '\0';
-
- for(i=0;i<2;i++) rd_blocksizes[i] = 1024;
- --- 90,98 ----
- cp = rd_start;
- for (i=0; i < length; i++)
- ! rd_isloaded = preload;
- ! if (!preload) {
- ! for (i=0; i < length; i++)
- ! *cp++ = '\0';
- ! }
-
- for(i=0;i<2;i++) rd_blocksizes[i] = 1024;
- ***************
- *** 115,118 ****
- --- 121,129 ----
- rd_length, (int) rd_start);
-
- + if (rd_isloaded) {
- + if (ROOT_DEV != ((MAJOR_RAMDISK << 8) | MINOR_RAMDISK))
- + printk("Root device not set to ramdisk\n");
- + return;
- + }
- /* If we are doing a diskette boot, we might have to pre-load it. */
- if (MAJOR(ROOT_DEV) != MAJOR_FLOPPY) return;
- ***************
- *** 177,178 ****
- --- 188,190 ----
- }
- }
- +
- diff -rc2 ./tools/build.c /usr/src/linux/tools/build.c
- *** ./tools/build.c Sun May 30 13:53:36 1993
- --- /usr/src/linux/tools/build.c Thu Sep 30 10:27:30 1993
- ***************
- *** 19,22 ****
- --- 19,23 ----
- /*
- * Changes by tytso to allow root device specification
- + * 25 Sep 1993 jwh - changes for network boot stuff
- */
-
- ***************
- *** 32,35 ****
- --- 33,39 ----
- #include <linux/a.out.h>
-
- + #define MAJOR_RAMDISK 1 /* should be in <linux/major.h> */
- + #define MINOR_RAMDISK 1
- +
- #define MINIX_HEADER 32
- #define GCC_HEADER 1024
- ***************
- *** 37,40 ****
- --- 41,52 ----
- #define SYS_SIZE DEF_SYSSIZE
-
- + #define DEF_RAMSTART 0x100000
- +
- + #define SYS_SIZE DEF_SYSSIZE
- + #define INITSEG DEF_INITSEG
- + #define SYSSEG DEF_SYSSEG
- + #define SETUPSEG DEF_SETUPSEG
- + #define RAMPTR DEF_RAMSTART
- +
- #define DEFAULT_MAJOR_ROOT 0
- #define DEFAULT_MINOR_ROOT 0
- ***************
- *** 46,49 ****
- --- 58,96 ----
- #define STRINGIFY(x) #x
-
- + typedef struct load_record
- + {
- + unsigned long rlength;
- + unsigned long address;
- + unsigned long ilength;
- + unsigned long mlength;
- + } LOAD_RECORD;
- +
- + #define FLAG_EOF 0x04000000
- +
- + typedef struct load_header
- + {
- + unsigned long magic;
- + unsigned long hlengthflags;
- + unsigned long locn;
- + unsigned long execute;
- + LOAD_RECORD lr_setup;
- + LOAD_RECORD lr_kernel;
- + LOAD_RECORD lr_ramdisk;
- + char dummy[496 - 64]; /* bring us up to 496 */
- + unsigned short ramdsk_start; /* start of ramdisk / 1024 */
- + unsigned short root_flags;
- + unsigned short syssize; /* SYSSIZE / 16 */
- + unsigned short swap_dev; /* SWAP_DEV */
- + unsigned short ram_size; /* RAMDISK in K */
- + unsigned short vid_mode; /* SVGA_MODE */
- + unsigned char root_dev_minor; /* ROOT_DEV */
- + unsigned char root_dev_major; /* ROOT_DEV */
- + unsigned short boot_flag; /* 0xAA55 */
- + } LOAD_HEADER;
- +
- + #define LENGTH_FIELD 4
- +
- + LOAD_HEADER lh;
- +
- typedef union {
- long l;
- ***************
- *** 72,75 ****
- --- 119,130 ----
- }
-
- + short unintel_short(short l)
- + {
- + conv t;
- +
- + t.s[0] = l;
- + return (t.b[0] + (t.b[1] << 8));
- + }
- +
- void die(char * str)
- {
- ***************
- *** 80,84 ****
- void usage(void)
- {
- ! die("Usage: build bootsect setup system [rootdev] [> image]");
- }
-
- --- 135,139 ----
- void usage(void)
- {
- ! die("Usage: build [-n uncompressed-image ramdisk] bootsect setup system [rootdev] [>image]");
- }
-
- ***************
- *** 92,99 ****
- struct stat sb;
-
- ! if ((argc < 4) || (argc > 5))
- ! usage();
- ! if (argc > 4) {
- ! if (!strcmp(argv[4], "CURRENT")) {
- if (stat("/", &sb)) {
- perror("/");
- --- 147,232 ----
- struct stat sb;
-
- ! unsigned long ramsize;
- ! unsigned long ramstart;
- ! unsigned long iramsize;
- ! unsigned long total_length;
- ! unsigned long fluffed_length;
- !
- ! int is_netBoot;
- ! char *argp;
- ! int argn;
- ! char *unc_image_name;/* name of uncompressed image file */
- ! char *ram_name; /* name or ramdisk file */
- ! char *bootsect_name;
- ! char *setup_name;
- ! char *zImage_name;
- ! char *root_dev_name;
- ! char name_of_ramdisk[128];
- !
- !
- ! if (sizeof(LOAD_HEADER) != 512)
- ! die("Bad build, load header size");
- ! unc_image_name =
- ! ram_name =
- ! bootsect_name =
- ! setup_name =
- ! zImage_name =
- ! root_dev_name = (char *)NULL;
- !
- ! is_netBoot = 0;
- ! for(argn = 1; argn < argc; argn++) {
- ! argp = argv[argn];
- ! if (*argp != '-') {
- ! if (is_netBoot) {
- ! if (unc_image_name == NULL) {
- ! unc_image_name = argp;
- ! continue;
- ! }
- ! else
- ! if (ram_name == NULL){
- ! if (*argp == '?') {
- ! fprintf(stderr, "Name of ramdisk :");
- ! fgets(name_of_ramdisk, sizeof(name_of_ramdisk),stdin);
- ! if ((argp = strchr(name_of_ramdisk, '\n')) != NULL)
- ! *argp = '\0';
- ! if (name_of_ramdisk[0] == '\0')
- ! usage();
- ! argp = name_of_ramdisk;
- ! }
- ! ram_name = argp;
- ! continue;
- ! }
- ! }
- ! if (bootsect_name == NULL)
- ! bootsect_name = argp;
- ! else if (setup_name == NULL)
- ! setup_name = argp;
- ! else if (zImage_name == NULL)
- ! zImage_name = argp;
- ! else if (root_dev_name == NULL)
- ! root_dev_name = argp;
- ! else {
- ! usage();
- ! }
- ! }
- ! else {
- ! switch(*++argp) {
- ! case 'n':
- ! is_netBoot = 1;
- ! break;
- ! default:
- ! usage();
- ! break;
- ! }
- ! }
- ! }
- ! if ((is_netBoot) && ((unc_image_name == NULL) || (ram_name == NULL)))
- ! usage();
- ! if ((bootsect_name == NULL) || (setup_name == NULL) ||
- ! (zImage_name == NULL))
- ! usage();
- !
- ! if (root_dev_name) {
- ! if (!strcmp(root_dev_name, "CURRENT")) {
- if (stat("/", &sb)) {
- perror("/");
- ***************
- *** 102,108 ****
- major_root = major(sb.st_dev);
- minor_root = minor(sb.st_dev);
- ! } else if (strcmp(argv[4], "FLOPPY")) {
- ! if (stat(argv[4], &sb)) {
- ! perror(argv[4]);
- die("Couldn't stat root device.");
- }
- --- 235,241 ----
- major_root = major(sb.st_dev);
- minor_root = minor(sb.st_dev);
- ! } else if (strcmp(root_dev_name, "FLOPPY")) {
- ! if (stat(root_dev_name, &sb)) {
- ! perror(root_dev_name);
- die("Couldn't stat root device.");
- }
- ***************
- *** 114,123 ****
- }
- } else {
- ! major_root = DEFAULT_MAJOR_ROOT;
- ! minor_root = DEFAULT_MINOR_ROOT;
- }
- fprintf(stderr, "Root device is (%d, %d)\n", major_root, minor_root);
- for (i=0;i<sizeof buf; i++) buf[i]=0;
- ! if ((id=open(argv[1],O_RDONLY,0))<0)
- die("Unable to open 'boot'");
- if (read(id,buf,MINIX_HEADER) != MINIX_HEADER)
- --- 247,262 ----
- }
- } else {
- ! if (is_netBoot) {
- ! major_root = MAJOR_RAMDISK;
- ! minor_root = MINOR_RAMDISK;
- ! }
- ! else {
- ! major_root = DEFAULT_MAJOR_ROOT;
- ! minor_root = DEFAULT_MINOR_ROOT;
- ! }
- }
- fprintf(stderr, "Root device is (%d, %d)\n", major_root, minor_root);
- for (i=0;i<sizeof buf; i++) buf[i]=0;
- ! if ((id=open(bootsect_name,O_RDONLY,0))<0)
- die("Unable to open 'boot'");
- if (read(id,buf,MINIX_HEADER) != MINIX_HEADER)
- ***************
- *** 135,147 ****
- if (((long *) buf)[7] != 0)
- die("Illegal symbol table in 'boot'");
- ! i=read(id,buf,sizeof buf);
- fprintf(stderr,"Boot sector %d bytes.\n",i);
- if (i != 512)
- die("Boot block must be exactly 512 bytes");
- ! if ((*(unsigned short *)(buf+510)) != (unsigned short)intel_short(0xAA55))
- die("Boot block hasn't got boot flag (0xAA55)");
- ! buf[508] = (char) minor_root;
- ! buf[509] = (char) major_root;
- ! i=write(1,buf,512);
- if (i!=512)
- die("Write call failed");
- --- 274,288 ----
- if (((long *) buf)[7] != 0)
- die("Illegal symbol table in 'boot'");
- ! i=read(id,&lh,sizeof buf);
- fprintf(stderr,"Boot sector %d bytes.\n",i);
- if (i != 512)
- die("Boot block must be exactly 512 bytes");
- ! if (lh.boot_flag != (unsigned short)intel_short(0xAA55))
- die("Boot block hasn't got boot flag (0xAA55)");
- ! if (lh.magic == (unsigned long)intel_long(0x1b031336))
- ! die("bottsect is already a net image\n");
- ! lh.root_dev_minor = (char) minor_root;
- ! lh.root_dev_major = (char) major_root;
- ! i=write(1,&lh,512);
- if (i!=512)
- die("Write call failed");
- ***************
- *** 148,152 ****
- close (id);
-
- ! if ((id=open(argv[2],O_RDONLY,0))<0)
- die("Unable to open 'setup'");
- if (read(id,buf,MINIX_HEADER) != MINIX_HEADER)
- --- 289,293 ----
- close (id);
-
- ! if ((id=open(setup_name,O_RDONLY,0))<0)
- die("Unable to open 'setup'");
- if (read(id,buf,MINIX_HEADER) != MINIX_HEADER)
- ***************
- *** 185,189 ****
- }
-
- ! if ((id=open(argv[3],O_RDONLY,0))<0)
- die("Unable to open 'system'");
- if (read(id,buf,GCC_HEADER) != GCC_HEADER)
- --- 326,330 ----
- }
-
- ! if ((id=open(zImage_name,O_RDONLY,0))<0)
- die("Unable to open 'system'");
- if (read(id,buf,GCC_HEADER) != GCC_HEADER)
- ***************
- *** 200,203 ****
- --- 341,345 ----
- if (sys_size > SYS_SIZE)
- die("System is too big");
- + total_length = sz;
- while (sz > 0) {
- int l, n;
- ***************
- *** 208,212 ****
- if ((n=read(id, buf, l)) != l) {
- if (n == -1)
- ! perror(argv[1]);
- else
- fprintf(stderr, "Unexpected EOF\n");
- --- 350,354 ----
- if ((n=read(id, buf, l)) != l) {
- if (n == -1)
- ! perror(zImage_name);
- else
- fprintf(stderr, "Unexpected EOF\n");
- ***************
- *** 217,225 ****
- }
- close(id);
- ! if (lseek(1,500,0) == 500) {
- ! buf[0] = (sys_size & 0xff);
- ! buf[1] = ((sys_size >> 8) & 0xff);
- ! write(1, buf, 2);
- }
- return(0);
- }
- --- 359,422 ----
- }
- close(id);
- ! lh.syssize = intel_short(sys_size);
- ! if (is_netBoot) {
- ! if ((id = open(unc_image_name,O_RDONLY,0))<0)
- ! die("Unable to open 'uncompressed system'");
- ! if (read(id,buf,GCC_HEADER) != GCC_HEADER)
- ! die("Unable to read header of 'uncompressed system'");
- ! if (N_MAGIC(*ex) != ZMAGIC)
- ! die("Non-GCC header of 'uncompressed system'");
- ! fprintf(stderr,"Real System is %d kB (%d kB code, %d kB data and %d kB bss)\n",
- ! (ex->a_text+ex->a_data+ex->a_bss)/1024,
- ! ex->a_text /1024,
- ! ex->a_data /1024,
- ! ex->a_bss /1024);
- ! fluffed_length = ex->a_text+ex->a_data+ex->a_bss;
- ! close(id);
- ! if ((id=open(ram_name, O_RDONLY, 0))<0)
- ! die("Unable to open 'ramdisk'");
- ! iramsize = 0;
- ! while((i = read(id, buf, sizeof(buf))) > 0) {
- ! if (write(1, buf, i) != i)
- ! die("failed to write ramdisk");
- ! iramsize += i;
- ! }
- ! close(id);
- ! ramsize = (iramsize + 1023) / 1024;
- ! ramstart = 1024 + (fluffed_length + 4095) / 1024;
- !
- ! if (ramsize) {
- ! lh.ram_size = (unsigned short) (ramsize);
- ! lh.ramdsk_start = (unsigned short) (ramstart);
- ! }
- ! lh.magic = intel_long(0x1b031336);
- ! lh.hlengthflags = intel_long(LENGTH_FIELD);
- ! lh.locn = intel_long(INITSEG<<16); /* es:bx */
- ! lh.execute = intel_long(SETUPSEG<<16); /* cs:ip */
- ! lh.lr_setup.rlength = intel_long(LENGTH_FIELD);
- ! lh.lr_setup.address = intel_long(SETUPSEG<<4);
- ! lh.lr_setup.ilength = intel_long(SETUP_SECTS * 512);
- ! lh.lr_setup.mlength = intel_long(SETUP_SECTS * 512);
- ! lh.lr_kernel.rlength = intel_long(LENGTH_FIELD | (ramsize ? 0 : FLAG_EOF));
- ! lh.lr_kernel.address = intel_long(SYSSEG<<4);
- ! lh.lr_kernel.ilength = intel_long(total_length);
- ! lh.lr_kernel.mlength = intel_long(total_length);
- ! if (ramsize) {
- ! lh.lr_ramdisk.rlength = intel_long(LENGTH_FIELD | FLAG_EOF);
- ! lh.lr_ramdisk.address = intel_long(ramstart * 1024);
- ! lh.lr_ramdisk.ilength = intel_long(iramsize);
- ! lh.lr_ramdisk.mlength = intel_long(ramsize * 1024);
- ! }
- }
- + if (lseek(1,0,0) != 0)
- + die("Can't seek to beginning of redirected output");
- + i=write(1,&lh,512);
- + if (i!=512)
- + die("Rewrite boot sector failed");
- return(0);
- }
- +
- +
- +
- +
- +
-